package _23二叉搜索树的后序遍历序列;

/**
 * 题目描述
 * 输入一个整数数组，判断该数组是不是某二叉搜索树的后序遍历的结果。
 * 如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
 */

/**
 * 思路：
 *      最后一个是根，从前遍历小于根的数，是左子树，剩下的是右子树
 */
public class Solution {
    public boolean VerifySquenceOfBST(int [] sequence) {
        if(sequence.length==0) return false;
       return judge(sequence,0,sequence.length-1);

    }
    boolean judge(int []sequence,int start,int end){
        //当只剩下一个元素时，返回true
        if(start==end) return true;
        int root = sequence[end];
        int i=start;

        while(sequence[i]<root){
            i++;
        }
        //如果都小于root，并且i==end，说明只有左边一列，返回true
        if(i==end) return true;
        for(int j=i;j<end;j++){
            if(sequence[j]<root){
                return false;
            }
        }
        //如果都大于root，说明只有右边一列，返回true
        if(i==start) return true;

        return judge(sequence,start,i-1)&&judge(sequence,i,end-1);

    }
}
